/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.invoice.controller;

import com.invoice.busines.CajaChicaBO;
import com.invoice.busines.CajaChicaBOImpl;
import com.invoice.busines.ComprobanteBO;
import com.invoice.busines.ComprobanteBOImpl;
import com.invoice.busines.dto.CajaChicaDTO;
import com.invoice.exceptions.InvoiceException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

 
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.faces.bean.ManagedBean;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
 *
 * @author meliMeli
 */
@ManagedBean
@SessionScoped
public class CajaChicaBean  extends BeanGenerico{
    private static final Logger logger = Logger.getLogger(CajaChicaBean.class.getName());
    private final CajaChicaBO cajachicaBO = new CajaChicaBOImpl();
    private final ComprobanteBO comprobanteBO = new ComprobanteBOImpl();
    private CajaChicaDTO cajachicaDTO;
    private static final String NOREDIRECCIONAR = "ListaCajaChica";
    
    private List<CajaChicaDTO> cajachicalist= new ArrayList<CajaChicaDTO>();
    Calendar fecha = Calendar.getInstance();
    private boolean habEdicion = false;
   // private List<LabelsarticuloDTO> labels = new ArrayList<LabelsarticuloDTO>();
   
     
     public Date fechaActual(){  
     cajachicaDTO.getFecha().toString();
        Calendar fecha = new GregorianCalendar();
        
        int año = fecha.get(Calendar.YEAR);
        int mes = fecha.get(Calendar.MONTH);
        int dia = fecha.get(Calendar.DAY_OF_MONTH);
        int hora = fecha.get(Calendar.HOUR_OF_DAY);
        int minuto = fecha.get(Calendar.MINUTE);
        int segundo = fecha.get(Calendar.SECOND);
        String fechas =dia + "/" + (mes+1) + "/" + año;
        Date fechaActual =deStringToDate(fechas);
        return fechaActual;
     }
    
     public void doSuma() {
        sumar();
    }

    private void sumar() {
        if(cajachicaDTO.getResinicioDia()==null){
            cajachicaDTO.setResinicioDia(BigDecimal.ZERO);
        }
        
        cajachicaDTO.setResinicioDia(cajachicaDTO.getEntradaI().add(cajachicaDTO.getResinicioDia()));
        actualizarTotales();
        
    }
    private void actualizarTotales(){
        if(cajachicaDTO.getVentas()==null){
            cajachicaDTO.setVentas(BigDecimal.ZERO);
        }
        if(cajachicaDTO.getSalidaS()==null){
            cajachicaDTO.setSalidaS(BigDecimal.ZERO);
        }
        cajachicaDTO.setTotal(cajachicaDTO.getResinicioDia().add(cajachicaDTO.getVentas()).subtract(cajachicaDTO.getSalidaS()));
    }
    
    public static Date deStringToDate(String fecha) {
    SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd-MM-yyyy");
    Date fechaEnviar = null;
    try {
            fechaEnviar = formatoDelTexto.parse(fecha);
            return fechaEnviar;
    }catch (ParseException ex) {
            ex.printStackTrace();
            return null;
    }
}
    
    @Override
    protected void init() {
       cajachicaDTO=new CajaChicaDTO();
       
    }
    

    
   public CajaChicaDTO getCajaChicaDTO() {
        return cajachicaDTO;
    }
    public void setCajaChicaDTO(CajaChicaDTO cajachicaDTO) {
        this.cajachicaDTO= cajachicaDTO;
    }
 
   
     public String addCajaChica(){
        cajachicaDTO = new CajaChicaDTO();
        return "RegistroCajaChica";
    }
     
      public void registrarCajaChica() throws Exception {
        try {
            cajachicaBO.addCajaChica(cajachicaDTO);
             msg=new FacesMessage(FacesMessage.SEVERITY_INFO,"Registro de CAJA CHICA exitoso", "CAJACHICA registrado correctamente");
             dispMessage();
        } catch (InvoiceException ex) {
          Logger.getLogger(CajaChicaBean.class.getName()).log(Level.SEVERE, null, ex);
          msg=new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error en registro", ex.getMessage());
        
        }
    
      }
      
      public void updateSetTotalVentas(){
        BigDecimal totalVentas = BigDecimal.ZERO;
        try {
            Date fechaVentas = cajachicaDTO.getFecha();
            if(fechaVentas != null){
                totalVentas = comprobanteBO.findTotalGroupByFecha(fechaVentas);
            }
        } catch (InvoiceException ex) {
            Logger.getLogger(CajaChicaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        cajachicaDTO.setVentas(totalVentas);
      }
     
 
      public void increment() {
         //number ++;
          cajachicaDTO.setTotal(BigDecimal.ZERO);
          cajachicaDTO.setTotal(cajachicaDTO.getEntradaI().add(cajachicaDTO.getSalidaS()));
      //  number++;
    }
      
      public List<CajaChicaDTO> listCajaChica(){
        List<CajaChicaDTO> list = new ArrayList<CajaChicaDTO>();
        try{
            list = cajachicaBO.findAll();
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return list;
    }
    
      public void eliminarCajaChica() throws Exception{
        try {
            cajachicaBO.deleteCajaChica(cajachicaDTO);
        } 
        catch (InvoiceException ex) {
            Logger.getLogger(CajaChicaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
  
    
   
   
    public String editCajaChica(){
        
        cajachicalist = new ArrayList<CajaChicaDTO>();
        cajachicalist.add(cajachicaDTO);
        return "RegistroCajaChica";
    }
   
    
    public void addMessage(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

   
    
}